package com.ywj.collection.javaList;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ListTraverse {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("money");
        list.add("study");
        list.add("honor");
        list.add("happy");

        //1.迭代器
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String str = it.next();
            System.out.println(str);
        }

        System.out.println("~~~~~~~~~");

        //2.增强for
        //下面的变量s，其实就是一个第三方的变量而已。在循环的过程中，依次表示集合中的每一个元素
        for (String s : list) {
            System.out.println(s);
        }

        System.out.println("~~~~~~~~~");

        //3.lambda表达式
        //forEach方法的底层其实就是一个循环遍历，依次得到集合中的每一个元素，并把每一个元素传递给下面的accept方法。accept方法的形参s，依次表示集合中的每一个元素
        list.forEach( s -> System.out.println(s));

        System.out.println("~~~~~~~~~");

        //4.普通for循环（因为List集合存在索引）
        //size方法跟get方法还有循环结合的方式，利用索引获取到集合中的每一个元素
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);  //i:依次表示集合中的每一个索引
            System.out.println(s);
        }

        System.out.println("~~~~~~~~~");

        //5.列表迭代器
        //获取一个列表迭代器的对象，里面的指针默认也是指向0索引的。
        //额外添加了一个方法：在遍历的过程中，可以添加元素。不能用集合的add方法添加、删除
        ListIterator<String> it1 = list.listIterator();
        while (it1.hasNext()) {
            String str1 = it1.next();
            if ("study".equals(str1)) {
                it1.add("learn");
            }
        }
        System.out.println(list);

    }
}
